Traditional computer systems are designed with applications executing in an environment specified by an operating system. The operating system in turn executes directly on hardware. In order to use devices in the hardware, an operating system installs the device driver. Thus, when applications want to use the device, the operating system uses the device driver to communicate with the device.
Advances in computer science have led to the virtualization of hardware. Specifically, rather than an operating system directly using resources of hardware, the operating system executes in a virtual environment with virtual hardware resources. One such virtual environment is created by the use of hypervisors to create domains, also referred to as virtual machines. Domains provide a mechanism for the containment of software and the separation of software from hardware. For example, the domain may be used to prevent software failures from causing another failure in the system. Thus in virtualized environment, applications execute in an environment created by the operating system which in turn executes on virtual hardware resources provided by a domain.
A hypervisor may be used to manage the execution of the domains, Specifically, hypervisors are used to determine which domains execute and to transfer control of processors and other physical resources between domains. In addition to the domains with applications and operating systems, other domains may include a control domain, which provides a management interface to the hypervisor, and a driver domain, which executes physical device drivers. The control domain is frequently the only driver domain for a computer system with a hypervisor. Specifically, when an operating system in a domain executing an application requires the use of hardware resources, the request may be transferred via a virtual device driver (i.e., a driver for a virtual device, sometimes also called a bridge device) to the control domain which performs the operations necessary to communicate with the device using a physical device driver.